package com.xuzimian.globaldemo.spring.security.oauth2.server.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;


public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

  /**
   * 根容器:返回的配置类定义了Spring应用根容器中的beans
   * 注意：上面配置的ComponentScan 会在spring 根容器中。但是不会将扫描到的controller 等springmvc 组件
   * @return
   */
  @Override
  protected Class<?>[] getRootConfigClasses() {
    return new Class<?>[] { RootConfig.class };
  }

  /**
   * Spring mvc容器:返回的配置类定义了Spring MVC应用容器中的beans
   *  注意：上面配置的ComponentScan 会在spring mvc 容器中，这里配置扫描 spring mvc 相关的组件，如Controller
   * @return
   */
  @Override
  protected Class<?>[] getServletConfigClasses() {
    return new Class<?>[] { WebMvcConfig.class };
  }

  /**
   * DispatcherServlet映射,从"/"开始
   * @return
   */
  @Override
  protected String[] getServletMappings() {
    return new String[] { "/" };
  }


  /**
   * 重写该方法主要是为session的标识JSESSIONID重命名，因为本地项目部署debug和测试都是在localhost域名下，导致
   * Session标识id会被覆盖，所以给该Oauth2授权应用的Session标识进行重命名。
   * @param servletContext
   * @throws ServletException
   */
  @Override
  public void onStartup(ServletContext servletContext) throws ServletException {
    super.onStartup(servletContext);
    servletContext.getSessionCookieConfig().setName("SESSIONID");
  }

}